home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / b / b.lha / B / src / bed / help.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-11-24  |  2.2 KB  |  126 lines

  1. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
  2. static char rcsid[] = "$Header: help.c,v 2.6 85/08/22 16:03:38 timo Exp $";
  3.  
  4. /*
  5.  * B editor -- Print help blurb.
  6.  */
  7.  
  8. #include "feat.h"
  9.  
  10. #ifdef HELPFUL
  11.  
  12. #include "unix.h"
  13.  
  14. #ifdef IBMPC
  15. #define getchar() getch()
  16. #endif IBMPC
  17.  
  18. #ifdef SIGNAL
  19. #include <signal.h>
  20. #endif SIGNAL
  21.  
  22. #ifdef SGTTY_H
  23. #include <sgtty.h>
  24. #endif SGTTY_H
  25.  
  26. #include "b.h"
  27.  
  28. string unixerror();
  29.  
  30. #ifndef HELPBLURB
  31. #define HELPBLURB "/usr/new/lib/B/Bed_help"
  32. #endif
  33.  
  34. #define SOBIT 0200
  35.  
  36. extern int winheight;
  37. extern int llength;
  38. extern int winstart;
  39.  
  40.  
  41. /*
  42.  * Interrupt catcher while printing message.
  43.  */
  44.  
  45. Hidden int intr;
  46.  
  47. #ifdef SIGNAL
  48. Hidden Procedure
  49. stop()
  50. {
  51.     intr = Yes;
  52.     signal(SIGINT, stop);
  53. }
  54. #endif SIGNAL
  55.  
  56.  
  57. /*
  58.  * Print help blurb.
  59.  * This is done through the standard screen interface.
  60.  * An interrupt during the printing only stops the printing.
  61.  * The user must type [return] to continue.
  62.  */
  63.  
  64. Visible bool
  65. help()
  66. {
  67.     FILE *fp;
  68.     string helpblurb;
  69.     char buffer[81];
  70.     int len = sizeof buffer;
  71.     string cp;
  72. #ifdef SIGNAL
  73.     int (*prevsig)();
  74. #endif SIGNAL
  75. #ifdef SGTTY_H
  76.     struct sgttyb tty;
  77. #endif SGTTY_H
  78.     int c;
  79.     
  80.     helpblurb = getenv("BED_HELP");
  81.     if (!helpblurb || !helpblurb[0])
  82.         helpblurb = HELPBLURB;
  83.     fp = fopen(helpblurb, "r");
  84.     if (!fp) {
  85.         error("Sorry, I can't help [%s]", unixerror(helpblurb));
  86.         return No;
  87.     }
  88. #ifdef SIGNAL
  89.     intr = No;
  90.     prevsig = signal(SIGINT, stop);
  91. #endif SIGNAL
  92.     if (llength < (sizeof buffer)-1)
  93.         len = llength+1;
  94.     while (!intr && fgets(buffer, len, fp)) {
  95.         cp = index(buffer, '\n');
  96.         if (cp)
  97.             *cp = '\0';
  98.         trmputdata(winheight, winheight, 0, buffer);
  99.         trmscrollup(0, winheight, 1);
  100.         trmsync(winheight, 0);
  101.     }
  102.     fclose(fp);
  103. #ifdef SIGNAL
  104.     signal(SIGINT, prevsig);
  105.     if (intr)
  106.         trmundefined();
  107.         /* UNIX discards output when interrupted */
  108.         /* so output position is uncertain */
  109. #endif SIGNAL
  110.     trmputdata(winheight, winheight, 0, "");
  111.     strcpy(buffer, "Press [return] to continue");
  112.     for (cp = buffer; *cp; )
  113.         *cp++ |= SOBIT;
  114.     trmputdata(winheight, winheight, 0, buffer);
  115.     trmsync(winheight, cp - buffer);
  116.     c = getchar();
  117.     while (c != '\n' && c != '\r' && c != EOF) {
  118.         trmbell();
  119.         c = getchar();
  120.     }
  121.     trmputdata(winheight, winheight, 0, "");
  122.     winstart = winheight;
  123.     return Yes;
  124. }
  125. #endif HELPFUL
  126.